/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package facade;

import beans.Estoque;
import beans.Fornecedor;
import beans.Funcionario;
import beans.Pedido;
import beans.PessoaFisica;
import beans.PessoaJuridica;
import beans.Produto;
import controller.*;
import java.util.Collection;

/**
 *
 * @author dlvcpe
 */
public class FacadeAlmox {

    private static FacadeAlmox instancia;

    private FacadeAlmox() {
    }

    public static FacadeAlmox getInstancia() {
        if (instancia == null) {
            instancia = new FacadeAlmox();
        }
        return instancia;
    }
    
    //GETS INSTANCIAS
//    private ControllerEndereco getControladorEndereco() {
//        return ControllerEndereco.getInstancia();
//    }
    
    private ControllerEstoque getControladorEstoque() {
        return ControllerEstoque.getInstancia();
    }
    
    private ControllerFornecedor getControladorFornecedor() {
        return ControllerFornecedor.getInstancia();
    }
    
    private ControllerFuncionario getControladorFuncionario() {
        return ControllerFuncionario.getInstancia();
    }
    
    private ControllerPedido getControladorPedido() {
        return ControllerPedido.getInstancia();
    }
    
    private ControllerPessoaFisica getControladorPessoaFisica() {
        return ControllerPessoaFisica.getInstancia();
    }
    
   private ControllerPessoaJuridica getControladorPessoaJuridica() {
        return ControllerPessoaJuridica.getInstancia();
    }
   
    private ControllerProduto getControladorProduto() {
        return ControllerProduto.getInstancia();
    }
    
    
    /*
     * FUNCIONARIOS
     * * 
     * -> Pesquisar por Funcionario
     * -> Incluir Funcionario
     * -> Alterar Funcionario
     * -> Excluir Funcionario
     * 
     */

    public void inserirFuncionario(Funcionario funcionario) {
        getControladorFuncionario().inserir(funcionario);
    }

    public void excluirFuncionario(Funcionario funcionario){
        getControladorFuncionario().excluir(funcionario);
    }

    public Collection consultarTodosFuncionarios() {
        return getControladorFuncionario().consultarTodos();
    }

    public Collection consultarFuncionarioNome(String nome) {
        return getControladorFuncionario().consultarNome(nome);
    }

    public Funcionario consultarFuncionarioLogin(String login) {
        return getControladorFuncionario().consultarFuncionarioLogin(login);
    }

    public void alterarFuncionario(Funcionario funcionario) {
        getControladorFuncionario().alterar(funcionario);
    }

    public int totalFuncionarioCadastrados() {
        return getControladorFuncionario().totalCadastrados();
    }
    
    
    /*
     * MOVIMENTACAO ENTRADA DE ESTOQUE
     * 
     * -> Pesquisar Entrada de Estoque
     * -> Incluir Entrada de Estoque
     * -> Alterar Entrada de Estoque
     * -> Excluir Entrada de Estoque
     *  
     */
    
    public void inserirEntradaEstoque(Estoque estoque) {
        getControladorEstoque().inserir(estoque);
    }

    public void excluirEntradaEstoque(Estoque estoque){
        getControladorEstoque().excluir(estoque);
    }

    public Collection consultarTodasEntradaEstoque() {
        return getControladorEstoque().consultarTodos();
    }

//    public Collection consultarEntradaEstoqueNome(String nome) {
//        return getControladorEstoque().consultarNome(nome);
//    }

    public Estoque consultarEntradaEstoqueID(Integer id) {
        return getControladorEstoque().consultarEstoqueID(id);
    }

    public void alterarEntradaEstoque(Estoque estoque) {
        getControladorEstoque().alterar(estoque);
    }

    /*
     * FORNECEDOR
     *
     * -> Pesquisar por Funcionario
     * -> Incluir Funcionario
     * -> Alterar Funcionario
     * -> Excluir Funcionario
     * 
     */
    public void inserirFornecedor(Fornecedor fornecedor) {
        getControladorFornecedor().inserir(fornecedor);
    }

    public void excluirFornecedor(Fornecedor fornecedor){
        getControladorFornecedor().excluir(fornecedor);
    }

    public Collection consultarTodosFornecedores() {
        return getControladorFornecedor().consultarTodos();
    }

    public Collection consultarFornecedor(String nome) {
        return getControladorFornecedor().consultarNome(nome);
    }

    public Funcionario consultarFornecedorID(Integer id) {
        return getControladorFornecedor().consultarEstoqueID(id);
    }

    public void alterarFornecedor(Fornecedor fornecedor) {
        getControladorFornecedor().alterar(fornecedor);
    }
      
    
    /*
     *PESSOA FISICA 
     */
     public void inserirPessoaFisica(PessoaFisica pf) {
        getControladorPessoaFisica().inserir(pf);
    }

    public void excluirPessoaFisica(PessoaFisica pj){
        getControladorPessoaFisica().excluir(pj);
    }

    public Collection consultarTodosPessoaFisica() {
        return getControladorPessoaFisica().consultarTodos();
    }

    public Collection consultarPessoaFisica(String nome) {
        return getControladorPessoaFisica().consultarNome(nome);
    }

    public PessoaFisica consultarPessoaFisicaID(Integer id) {
        return getControladorPessoaFisica().consultarPessoaFisicaID(id);
    }

    public void alterarPessoaFisica(PessoaFisica pf) {
        getControladorPessoaFisica().alterar(pf);
    }
    
    public int totalPessoaFisica (){
        return getControladorPessoaFisica().totalCadastrados();
    }
    /*
     * PESSOA JURIDICA
     */
    public void inserirPessoaJuridica(PessoaJuridica pj) {
        getControladorPessoaJuridica().inserir(pj);
    }

    public void excluirPessoaJuridica(PessoaJuridica pj){
        getControladorPessoaJuridica().excluir(pj);
    }

    public Collection consultarTodosPessoaJuridica() {
        return getControladorPessoaJuridica().consultarTodos();
    }

    public Collection consultarPessoaJuridica(String nome) {
        return getControladorPessoaJuridica().consultarNome(nome);
    }

    public PessoaJuridica consultarPessoaJuridicaID(Integer id) {
        return getControladorPessoaJuridica().consultarPessoaJuridicaID(id);
    }

    public void alterarPessoaJuridica(PessoaJuridica pj) {
        getControladorPessoaJuridica().alterar(pj);
    }
    public int totalPessoaJuridica(){
        return getControladorPessoaJuridica().totalCadastrados();
    }
    
    /*
     * PRODUTO
     * 
     * -> Pesquisar Produto
     * -> Incluir Produto
     * -> Alterar Produto
     * -> Excluir Produto
     * 
     * -->> Verificar Estoque Mínimo (Retorna Itens com valores menores ou iguais ao estoque mínimo)
     * 
     */
    public void inserirProduto(Produto produto) {
        getControladorProduto().inserir(produto);
    }

    public void excluirProduto(Produto produto){
        getControladorProduto().excluir(produto);
    }

    public Collection consultarTodosProdutos() {
        return getControladorProduto().consultarTodos();
    }

    public Collection consultarProduto(String nome) {
        return getControladorProduto().consultarNome(nome);
    }

    public Produto consultarProdutoID(Integer id) {
        return getControladorProduto().consultarProdutoID(id);
    }

    public void alterarProduto(Produto produto) {
        getControladorProduto().alterar(produto);
    }
    
    /*
     *  PEDIDO DE COMPRA 
     * 
     * -> Pesquisar Pedido de Compras
     * -> Incluir Pedido de Compras
     * -> Alterar Pedido de Compras
     * -> Excluir Pedido de Compras
     * 
     */
    
     public void inserirPedido(Pedido pedido,String funcLogin, Integer pjId, Integer produtoId) {
        getControladorPedido().inserir(pedido,funcLogin, pjId, produtoId);
    }

    public void excluirPedido(Pedido pedido){
        getControladorPedido().excluir(pedido);
    }

    public Collection consultarTodosPedidos() {
        return getControladorPedido().consultarTodos();
    }

    public Collection consultarPedido(String nome) {
        return getControladorPedido().consultarNome(nome);
    }

    public Pedido consultarPedidoID(Integer id) {
        return getControladorPedido().consultarEstoqueID(id);
    }

    public void alterarPedido(Pedido pedido) {
        getControladorPedido().alterar(pedido);
    }
}
